package QRCode;

import org.springframework.http.ResponseEntity;
import com.google.zxing.WriterException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Objects;

/**
 * @author yangjicong
 * @date 2022/9/20
 */
@Slf4j
public class RunQRCode {

    /**
     * url如果为文本,扫码则是文本信息
     * url如果为链接,则进行对应的跳转,可在url后携带参数进行传递
     * 如: https://www.baidu.com?test=12345
     */
    public static String url = "https://www.baidu.com/";


    public static void main(String[] args) throws Exception {
        // 存放在二维码中的内容
        // String text = "www.baidu.com";
        // 嵌入二维码的图片路径
        String imgPath = "G:/qrCode/dog.jpg";
        // 生成的二维码的路径及名称
        String destPath = "D:\\jam.jpg";
        //生成二维码
        QRCodeUtil.encode(url,imgPath, destPath, true);
        // 解析二维码
        String str = QRCodeUtil.decode(destPath);
        // 打印出解析出的内容
        System.out.println(str);


        try {
            methodThree();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }



    /**
     * 方法一：响应文件流
     *
     * @return ResponseEntity响应文件流
     */
    public ResponseEntity<byte[]> methodOne() {
        byte[] qrCode = null;
        try {
            qrCode = QRCodeUtil.generateQrCodeByte(url, 350, 350);
        } catch (Exception e) {
            log.info("Exception:{}", e.getMessage());
        }
        // Header设置文件类型（对于ResponseEntity响应的方式，必须设置文件类型）
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.IMAGE_PNG);

        return new ResponseEntity<>(qrCode, headers, HttpStatus.CREATED);
    }

    /**
     * 方法二：响应文件流
     *
     * @param response response原生响应文件流
     */
    public void methodTwo(HttpServletResponse response) throws IOException {
        byte[] qrCode = null;
        try {
            qrCode = QRCodeUtil.generateQrCodeByte(url, 350, 350);
        } catch (Exception e) {
            log.info("Exception:{}", e.getMessage());
        }
        // Header设置文件类型（ContentType不设置也没事）
        response.setContentType(MediaType.IMAGE_PNG_VALUE);
        response.getOutputStream().write(Objects.requireNonNull(qrCode));
    }

    /**
     * 方法三：下载到本地
     *
     */
    public static void methodThree() throws IOException, WriterException {
        //下载路径及文件名
        String filePath = "D:\\or-code.png";
        QRCodeUtil.generateQrCodeImage(url, 350, 350, filePath);
    }




}
